Skip to content

Add Kind dev environment setup skill and slash command#2307

Merged
google-oss-prow[bot] merged 5 commits intokubeflow:mainfrom
manaswinidas:kind-cluster-skill-command
Apr 15, 2026
Merged

Add Kind dev environment setup skill and slash command#2307
google-oss-prow[bot] merged 5 commits intokubeflow:mainfrom
manaswinidas:kind-cluster-skill-command

Conversation

@manaswinidas
Copy link
Copy Markdown
Contributor

Description

Adds a reusable /kind-cluster-setup slash command (for both Cursor and Claude Code) and a Cursor agent skill that automates local Kind cluster setup for model-registry UI development.

The command supports optional components via arguments:

Core: Colima + Tilt + BFF + Frontend (always runs)
catalog / perf-data: Deploy Model Catalog with demo performance data overlay
minio: Deploy MinIO S3 storage for testing transfer jobs
oci-transfer: ARM64 image build + Kind load for async-upload jobs
real-k8s: Use real K8s client instead of mock
all: Everything
Also includes a troubleshooting table covering common issues (port conflicts, ARM64 image pulls, S3 key format, OCI reference format, envtest lock errors).

How Has This Been Tested?

Tested by running /kind-cluster-setup in Cursor chat and verifying it follows the skill instructions. Verified all three core terminals start correctly:
Infrastructure: colima start then cd devenv && ./bin/tilt up
BFF: cd clients/ui/bff && go run ./cmd --port=4000 --dev-mode --dev-mode-model-registry-port=8080 --dev-mode-catalog-port=8082 --deployment-mode=standalone --mock-k8s-client
Frontend: cd clients/ui/frontend && DEPLOYMENT_MODE=standalone STYLE_THEME=patternfly npm run start:dev
Also verified optional components work as documented:
catalog: ./scripts/deploy_catalog_demo_on_kind.sh deploys successfully
minio: MinIO deploys and bucket creation succeeds
oci-transfer: ARM64 image builds and loads into Kind

Test Impact

No production code changes. Only adds developer tooling (skills and commands).

Merge criteria:

  • All the commits have been signed-off (To pass the DCO check)
  • The commits have meaningful messages
  • Automated tests are provided as part of the PR for major new functionalities; testing instructions have been added in the PR body (for PRs involving changes that are not immediately obvious).
  • The developer has manually tested the changes and verified that the changes work.
  • Code changes follow the kubeflow contribution guidelines.
  • For first time contributors: Please reach out to the Reviewers to ensure all tests are being run, ensuring the label ok-to-test has been added to the PR.

If you have UI changes

  • The developer has added tests or explained why testing cannot be added.
  • Included any necessary screenshots or gifs if it was a UI change.
  • Verify that UI/UX changes conform the UX guidelines for Kubeflow.

@ppadti
Copy link
Copy Markdown
Contributor

ppadti commented Mar 5, 2026

oci-transfer: ARM64 image build + Kind load for async-upload jobs - this is not required now, because we have different image upstream, midstream and downstream

Comment thread .cursor/commands/kind-cluster-setup.md Outdated
Comment thread .cursor/commands/kind-cluster-setup.md Outdated
Comment thread .cursor/skills/kind-dev-setup/SKILL.md Outdated
Comment thread .cursor/commands/kind-cluster-setup.md Outdated
Comment thread .cursor/skills/kind-dev-setup/SKILL.md Outdated
Copy link
Copy Markdown
Member

@jonburdo jonburdo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is really cool @manaswinidas! I love all the work to make our dev setups more manageable.

Just my 2 cents: I wonder how much of this can be made equally accessible to humans and agents via scripts and added docs files. This could also help streamline the command files a bit!

Comment thread .cursor/commands/kind-cluster-setup.md Outdated
Comment on lines +21 to +24
colima start
kind get clusters | grep -q '^model-registry$' || kind create cluster --name model-registry
kubectl config use-context kind-model-registry
cd devenv && make tilt-up
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should sequences of commands like this be put into scripts instead? I think this could help with:

  • humans being able to easily run the same commands quickly
  • configuration and less hard-coding (i.e. using a different port for a particular service)
  • deterministic use - AI tools can generally read a script and run an adjusted version if needed, but in a typical scenario, it can be helpful to have consistency and know what exactly you expect to be run


## Stop Frontend (port 9000)
```
lsof -ti:9000 | xargs kill -9 2>/dev/null || true
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What if I've started some other service on 9000 and started the frontend on 9001? My AI agent may or may not be aware if it. Might be worth making this configurable

Comment thread .cursor/skills/kind-dev-setup/SKILL.md Outdated
Comment on lines +207 to +209
- **S3 key must be a directory prefix** (e.g. `models/dir/`), not a full file path. Using the exact file path causes an EBUSY error because `os.path.relpath` resolves to `.`.
- **Destination URI must be an OCI reference** (`quay.io/org/repo:tag`), not a web URL (`https://quay.io/repository/...`). The upload code prepends `docker://`.
- Sample job manifests are in `jobs/async-upload/samples/` (`create_model_example.yaml`, `create_version_example.yaml`, `sample_job_s3_to_oci.yaml`).
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of the general info in here is great for human and agents to see. I wonder if some of this should go in docs files and then skills should point to the relevant files - just an idea

Comment thread .gitignore Outdated
# Claude code
CLAUDE.md
.claude/
.claude/settings.json
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will cause us to start tracking everything under .claude except for settings.json. Correct me if I'm wrong, but I think we still want default to ignoring things under .claude and (and probably .cursor) and opt-in to certain files and dirs. I also think we probably do want to track .claude/settings.json (for shared settings) but ignore .claude/settings.local.json (personal settings) which should be possible with something like:

.claude/*
!.claude/commands/
!.claude/settings.json

@jonburdo
Copy link
Copy Markdown
Member

jonburdo commented Mar 17, 2026

One other thing to consider is how we tend to do these things more broadly in kubeflow. With kubeflow repos checked out locally, this is what I find:

$ fd -i '^(\.claude|\.cursor|AGENTS\.md|CLAUDE\.md)$' -uuu
pipelines/AGENTS.md
sdk/AGENTS.md
sdk/CLAUDE.md
trainer/AGENTS.md
trainer/CLAUDE.md

Copy link
Copy Markdown
Member

@tarilabs tarilabs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thank you for this PR it raises important questions;

I would advise that before adding .claude and .cursor directories we check with the Kubeflow community/KSC whether this is allowed/feasible, and as a WG that we want really to proceed in this direction.

Afaik Copilot is a vetted AI assisted tool in CNCF, but I'm unsure how these claude/copilot Skills would be received giving are specific?

We could safely add AGENTS.md and symbolic link CLAUDE.md to it, because other repos are doing.

Personally, I believe the implementation of these 2 skill seems a bit over reliant on text file when we have already scripts and Make target to do analogously in CI/CD; my2c

Comment thread .cursor/skills/kind-dev-setup/SKILL.md Outdated

## Prerequisites

- Docker and Colima installed
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this truly the case?

Comment thread .cursor/commands/kind-cluster-setup.md Outdated

## Arguments

Prerequisites: Docker, Colima, Kind, kubectl, Go >= 1.25.7, Node.js >= 22.0.0 (Tilt is auto-downloaded by `make tilt-up`).
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is it truly requiring Docker and Colima?

Signed-off-by: manaswinidas <dasmanaswini10@gmail.com>
…amespace

Signed-off-by: manaswinidas <dasmanaswini10@gmail.com>
Signed-off-by: manaswinidas <dasmanaswini10@gmail.com>
Signed-off-by: manaswinidas <dasmanaswini10@gmail.com>
@manaswinidas
Copy link
Copy Markdown
Contributor Author

@tarilabs @jonburdo Addressed all review comments

Copy link
Copy Markdown
Member

@jonburdo jonburdo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm

This seems much cleaner. Thanks for re-organizing into docs and scripts!

I would like to get input from someone else too

/cc @chambridge @Al-Pragliola @pboyd @adysenrothman @dkuc

Copy link
Copy Markdown
Member

@pboyd pboyd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm

Comment thread scripts/dev_teardown.sh Outdated
@jonburdo
Copy link
Copy Markdown
Member

/lgtm
/approve
/hold

@manaswinidas feel free to unhold if you're ready to merge this! I'm happy to re-approve if you do have any last changes :)

Co-authored-by: Paul Boyd <paul@pboyd.io>
Signed-off-by: Manaswini Das <dasmanaswini10@gmail.com>
@google-oss-prow google-oss-prow Bot removed the lgtm label Apr 15, 2026
@manaswinidas
Copy link
Copy Markdown
Contributor Author

This is good to go now - @jonburdo can you add /lgtm again ?

@jonburdo
Copy link
Copy Markdown
Member

/lgtm
/approve

I'm excited to have this! Thanks for working on it @manaswinidas :)

@google-oss-prow google-oss-prow Bot added the lgtm label Apr 15, 2026
@google-oss-prow
Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: jonburdo

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@jonburdo
Copy link
Copy Markdown
Member

/unhold

@google-oss-prow google-oss-prow Bot merged commit b5dd058 into kubeflow:main Apr 15, 2026
27 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants